/**
 * 装饰模式是只针对一个基本的对象，添加一些修饰。
 如下面的是对MacBook，加内存（Memory函数装饰）增加75美元，雕刻（Engraving函数装饰）增加200美元，买保险（Insurance函数装饰）增加250美元。
 */

class MacBook {
  cost() {
    return 997;
  }
  screenSize() {
    return 11.6;
  }
}

function Memory(macbook) {
  let v = macbook.cost();
  macbook.cost = function() {
    return v + 75;
  };
}
// Decorator 2
function Engraving(macbook) {

  let v = macbook.cost();
  macbook.cost = function() {
    return v + 200;
  };
}
// Decorator 3
function Insurance(macbook) {
  let v = macbook.cost();
  macbook.cost = function() {
    return v + 250;
  };
}
let mb = new MacBook();
Memory(mb);
Engraving(mb);
Insurance(mb);
console.log(mb.cost());// Outputs: 1522
console.log(mb.screenSize());// Outputs: 11.6

//也可以成为高阶函数，../utils/NetInfoDecorator.js，../utils/sx-fetch，../utils/EventEmitter.js，均为高阶函数，可供参考

